unit form_duplicatam; // Uniplacas

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RDprint, StdCtrls, Buttons, ExtCtrls, Db, DBTables;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    rdp: TRDprint;
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure rdpBeforeNewPage(Sender: TObject; Pagina: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

function Imprime_DuplicataM(h: THandle; lpar_entidade, lpar_emissao, lpar_vencto, lpar_numfat, lpar_valorfat, lpar_numdup, lpar_valordup: pchar): boolean; export;

implementation

uses biblio, clsEntidade, clsEndereco, clsCidade, clsParametros, dm;

var
  fecha: boolean;
  par_entidade,
    par_emissao,
    par_vencto,
    par_numfat,
    par_numdup: string;
  par_valorfat,
    par_valordup: double;

{$R *.DFM}

function Imprime_DuplicataM;
var
  w: integer;
  valorfat,
    valordup: string;
begin
  par_entidade := '';
  par_emissao := '';
  par_vencto := '';
  par_numfat := '';
  par_numdup := '';
  valorfat := '';
  valordup := '';
  for w := 0 to length(lpar_entidade) - 1 do par_entidade := par_entidade + lpar_entidade[w];
  for w := 0 to length(lpar_emissao) - 1 do par_emissao := par_emissao + lpar_emissao[w];
  for w := 0 to length(lpar_vencto) - 1 do par_vencto := par_vencto + lpar_vencto[w];
  for w := 0 to length(lpar_numfat) - 1 do par_numfat := par_numfat + lpar_numfat[w];
  for w := 0 to length(lpar_numdup) - 1 do par_numdup := par_numdup + lpar_numdup[w];
  for w := 0 to length(lpar_valorfat) - 1 do valorfat := valorfat + lpar_valorfat[w];
  for w := 0 to length(lpar_valordup) - 1 do valordup := valordup + lpar_valordup[w];
  par_valorfat := formata_string(valorfat);
  par_valordup := formata_string(valordup);
  fecha := false;
  Application.Handle := h;
  form1 := TForm1.Create(Application);
  try
    form1.Width := 0;
    form1.Height := 0;
    form1.ShowModal;
  finally
    form1.free;
  end;
  result := true;
end;

procedure TForm1.FormActivate(Sender: TObject);
var
  exte1, exte2,
    exte3, ext1,
    ext2, a1,
    a2, a3, a4, a5: string;
  a: Integer;
  var1: atext;
  entidade: TEntidade;
  endereco: TEndereco;
  cidade: TCidade;
  parametros: TParametros;
  xLin: Integer;
begin
  entidade := TEntidade.Create;
  cidade := TCidade.Create;
  endereco := TEndereco.Create;
  parametros := TParametros.Create;
  parametros.Recuperar('1');
  setlength(var1, 0);
  xLin := 1;
  with rdp do begin
    Abrir;
    impf(06, 59, copy(par_emissao, 1, 2) + '       ' +
                 copy(par_emissao, 4, 2) + '      ' +
                 copy(par_emissao, 7, 4), [comp17]);

    impf(10, 04, par_numfat, [comp17]);
    impf(10, 17, Mascara_Valor(floattostr(par_valorfat)), [comp17]);
    impf(10, 30, par_numdup, [comp17]);
    impf(10, 41, Mascara_Valor(floattostr(par_valordup)), [comp17]);
    impf(10, 54, par_vencto, [comp17]);

    entidade.Recuperar(par_entidade);
    impf(14, 23, entidade.Ent_Nome, [comp17]);
    impf(14, 75, par_entidade, [comp17]);

    if endereco.Recuperar_cobranca(par_entidade, parametros.tipo_endcobranca) = 0 then begin
      endereco.Recuperar_primeiro(par_entidade);
    end;

    impf(15, 23, endereco.End_Endereco, [comp17]);
    cidade.Recuperar(endereco.Cid_Codigo);
    impf(16, 23, cidade.Cid_Nome, [comp17]);
    impf(16, 57, cidade.Cid_est_sigla, [comp17]);
    impf(16, 66, mascaraCep(endereco.End_Cep), [comp20]);

    impf(17, 23, endereco.End_Endereco + '   ' + endereco.End_bairro, [comp20]);

    if entidade.Ent_Cnpj <> '' then begin
      a1 := copy(entidade.Ent_Cnpj, 1, 2);
      a2 := copy(entidade.Ent_Cnpj, 3, 3);
      a3 := copy(entidade.Ent_Cnpj, 6, 3);
      a4 := copy(entidade.Ent_Cnpj, 9, 4);
      a5 := copy(entidade.Ent_Cnpj, 13, 2);
      impf(18 , 23, a1 + '.' + a2 + '.' + a3 + '/' + a4 + '-' + a5, [comp17])

    end else begin
      impf(18 , 23, entidade.Ent_Cpf, [comp17]);

    end;

    impf(18, 59, entidade.Ent_Inscest, [comp17]);
    exte1 := '';
    exte2 := '';
    exte3 := '';
    Extenso(par_valordup, 255, 255, ext1, ext2, 4, ' ');
    var1 := Ret_TextJ(ext1, 100);

    for a := 1 to length(var1) do begin
      case a of
        1: Exte1 := var1[a - 1];
        2: Exte2 := var1[a - 1];
        3: Exte3 := var1[a - 1];
        
      end;

    end;

    impf(20, 23, exte1, [comp20]);
    if exte2 <> '' then begin
      impf(21, 23, exte2, [comp20]);
      if exte3 <> '' then begin
        impf(22, 23, exte3, [comp20]);
      end;

    end;

    Setup;
    Fechar;

  end;

  parametros.free;
  cidade.free;
  endereco.free;
  entidade.free;
  fecha := true;
  Timer1.Interval := 1;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if fecha then begin
    Application.Terminate;
    //Close;
  end;

end;         

procedure TForm1.rdpBeforeNewPage(Sender: TObject; Pagina: Integer);
begin
  if rdp.Impressora = Epson then begin
    rdp.acentuacao := SemAcento
  end else begin
    rdp.acentuacao := Transliterate;
  end;
end;

initialization
  begin
    dmint := TDmint.Create(application);
  end;

finalization
  begin
    dmint.free;
  end;

end.

